// //1.商品信息数据库
// const menuModel = require('../db/menu')
// //2.导入购物车数据库
// const cartModel = require('../db/cart')
// //3.导入订单数据库
// const orderModel = require('../db/order')
// const userModel = require('../db/user')
// //
// //2.书写方法

// module.exports = {
//      // 将查询到的商品id获取商品信息
            
//             // 拿商品id查询商品名称

//             // 组合订单需要的数据

//             // 插入到订单表

//             // 删除购物车表中数据

//             //读取数据
//     getAllCreate(req, res) {
//         // 接收所有结算的购物车数据的id
//         let {userid} = req.body
//         cartModel.findOne({userid} ,{__v:0}, (err,docs) =>{
//             if(err){
//                 throw new Error (err)
//             } 
//             console.log(docs);
//             console.log({menuid:docs.menuid});
//             menuModel.findOne({menuid:docs.menuid} ,{__v:0},(err,docs) =>{
//                 console.log(docs);
//                 //数组1
//                 let arr=[]
//                 for(let i = 1 ; i < docs.length ; i++){
//                     arr[i] = docs[i].name
//                 }   
//                 console.log(arr);
//             })
            
       
            
//     })
//     },
//     getCreate(req, res) {
//         res.json('123')
//     }
// }






//2023//3//11 14:30 

//1.商品信息数据库
const menuModel = require('../db/menu')
//2.导入购物车数据库
const cartModel = require('../db/cart')
//3.导入订单数据库
const orderModel = require('../db/order')
//4.用户id
const userModel = require('../db/user')


module.exports = {
    // 接收所有结算的购物车数据的id
    // 将查询到的商品id获取商品信息
    // 拿商品id查询商品名称
    // 组合订单需要的数据
    // 插入到订单表
    // 删除购物车表中数据
    // 读取数据
    getCreate(req, res) {
    // 手动输入的数据:
    // 用户id     √
    // 接收结算的时候选择的进食方式 -> 堂食/打包  √
    // 接收结算的时候总价  √ (已经自动化了)
    let{userid} = req.body
    // if(mode === 'ture'){
    //     mode ==="堂食"
    // }
    // if(mode === 'false'){
    //     mode ==="打包"
    // }
    cartModel.find({userid} ,(err,docs) =>{
        if(err) {
            throw new Error(err)
        }
        console.log(docs);
        //menuid数组
        let arr=[]
        //num数组
        let num =[]
        //是否堂食
        let mode =[]
        //种类价钱
        let kd = []
        //循环读取全部的menuid
        for(let i = 0 ; i < docs.length ; i++){
            //读取用户中的menuid  目的:读取商品id 根据商品id查找出对应数据
            arr[i] = docs[i].menuid
            //读取每个商品有多少数量 目的是:为总价计算做准备
            num[i] = docs[i].num
            //读取是否堂食:目的是:取第一个是否堂食作为订单状态
            mode[i] = docs[i].mode
            //读取种类价钱 目的是:读取其中的金钱
            kd[i]   = docs[i].price
        }
        
        // let arr1 =  new Set(arr)
        console.log(arr);
        console.log(num);
        console.log(mode);
        console.log(kd);
    //通过menuid查找menuModel中的menuid 
    // $in : [0002 0003 0003] 查找满足条件的数据
    menuModel.find({menuid:{$in : arr}} ,(err,docs) =>{
        if(err) {
            throw new Error(err)
        }
        console.log(docs);
        // console.log(num);

        // // 读取num:
        let menunum = []

        for(let n = 0 ; n < num.length ; n++){
            menunum[n] = num[n]
        }
        // for(let p = 0 ; p < docs.length ; p++){
        //     menuprice[p] = docs[p].price
        // }
        // 总价算法:
        let maxnum = 0 
        for(let p = 0 ; p < menunum.length ; p++ ){
            // maxnum += Number(menunum[p]) * Number(menuprice[p])
            maxnum += menunum[p] * kd[p]
        }

        console.log(menunum ,kd, maxnum);

        //读取第一个名字
        var firtename = docs[0].name
        console.log(firtename);

        //直接判断是否堂食
        let firtemode = mode[0]
        console.log(firtemode);

        if(firtemode){
            firtemode = '堂食'
        }
        firtemode = '外带'

        //生成随机的id
        let rd = Math.random().toString().slice(2, 22)
        console.log(rd);
        //订单跟取餐码随机
        let rd2 = Math.random().toString().slice(2, 4)
        //定义订单状态
        let status = "已付款"
        //生成今天的开始的时间戳 和 今天结束时间戳
        let now  = +new Date(Date.now() + (8 * 60 * 60 * 1000))
        //天数
        let day  = now / 1000 / 60 / 60 / 24
        //开始时间
        let start = Math.floor(day) * 1000 * 60 * 60 * 24
        //结束时间
        let end = Math.ceil(day) * 1000 * 60 * 60 * 24


        //查询出单天的下单时间
        //根据购买时间找出该时间下的单
        orderModel.find({time:{$gt: start, $lt: end}},(err,docs) =>{
            if(err){
                throw new Error (err)
            }
            console.log('123'+docs);
            //如果订单没有数据不就会判断是否重复了 直接执行下面的添加数据的语句
            if(docs.length){
            //进行判断 随机取餐码跟订单 不能重复
            
            //创建数组 - rd
            let isrds = []
            //创建数组 - rd2
            let isrd2s = []
            //变量查询出来的数组 让rd rd2 导入 新数组中 
            for(let i = 0 ; i < docs.length ; i++){
                isrds[i]  = docs[i].rd
                isrd2s[i] = docs[i].rd2
            }
            //根据新数组中的长度 对 rd rd2 的数据进行判断 
            for(let y = 0 ; y < isrd2s.length ; y++){
                if( rd === isrds[y]){
                     rd = Math.random().toString().slice(2, 22)
                     console.log(rd); //不等于时不会执行
                }
                else if(rd2 === isrd2s[y]){
                     rd2 = Math.random().toString().slice(2, 4)
                }
                else{
                    break;
                }
             }
            }  
            
            
            userModel.findOne({userid},{__v:0},(err,docs) =>{
                if(err){
                    throw new Error (err)
                }
                let uname = docs.username
                if(docs){
                    //所以将数据添加到订单表中
            orderModel.insertMany({
                //订单码
                orderno:rd,
                //打包 或者 堂食
                mode:firtemode,
                //第一个商品名字
                menuname:firtename,
                //取餐码
                code:"00" + rd2,
                //总价
                totalprice:maxnum,
                //是否支付成功
                status,
                //用户id
                userid,
                //用户名字
                username:uname,
                //时间
                time:now,
            } ,(err,docs) =>{
                if(err){
                    throw new Error (err)
                }
                // 删除购物车表的数据
                // cartModel.deleteMany({menuid :{$in:arr}} , (err,docs) =>{
                //     if(err){
                //         throw new Error (err)
                //     }
                    res.json({
                        error_code:0,
                        msg:'支付成功!'
                    })
                    return
                // })
            })
                }
            })
            
        })
    })   
    })
    },
    getAllCreate(req, res) {
        // res.json('123')
        //获取用户的历史订单 全部订单消息
        let{userid} = req.params
        //读取:所以订单数据
        orderModel.find({userid} , (err,docs) =>{
            if(err){
                throw new Error (err)
            }
            res.json({
                error_code:0,
                msg:'获取订单成功!',
                data:docs
            })
            return
        })
        // res.send('获取所以订单')
    }
}